From 52a849288793e7eede878798a88760c058266f60 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 17 Sep 2021 09:28:12 -0400 Subject: [PATCH] rendernodepaintable: Provide accurate aspect ratio Since we report width and height as integers, the default implementation of this introduces rounding errors. This shows up in the node-editor, as having uneven scale factors like sx=1.0 and sy=1.0035. Text nodes don't handle uneven scales like that well and overdraw. --- gtk/gtkrendernodepaintable.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/gtk/gtkrendernodepaintable.c b/gtk/gtkrendernodepaintable.c index a777187247..bbe9cc5b13 100644 --- a/gtk/gtkrendernodepaintable.c +++ b/gtk/gtkrendernodepaintable.c @@ -87,6 +87,17 @@ gtk_render_node_paintable_paintable_get_intrinsic_height (GdkPaintable *paintabl return ceilf (self->bounds.size.height); } +static double +gtk_render_node_paintable_paintable_get_intrinsic_aspect_ratio (GdkPaintable *paintable) +{ + GtkRenderNodePaintable *self = GTK_RENDER_NODE_PAINTABLE (paintable); + + if (self->bounds.size.height != 0) + return self->bounds.size.width / self->bounds.size.height; + + return 0; +} + static void gtk_render_node_paintable_paintable_init (GdkPaintableInterface *iface) { @@ -94,6 +105,7 @@ gtk_render_node_paintable_paintable_init (GdkPaintableInterface *iface) iface->get_flags = gtk_render_node_paintable_paintable_get_flags; iface->get_intrinsic_width = gtk_render_node_paintable_paintable_get_intrinsic_width; iface->get_intrinsic_height = gtk_render_node_paintable_paintable_get_intrinsic_height; + iface->get_intrinsic_aspect_ratio = gtk_render_node_paintable_paintable_get_intrinsic_aspect_ratio; } G_DEFINE_TYPE_EXTENDED (GtkRenderNodePaintable, gtk_render_node_paintable, G_TYPE_OBJECT, 0, -- 2.30.2